Skip to main content

Ubuntu’da UFW ile Güvenlik Duvarı Kurulumu

Giriş

UFW (Uncomplicated Firewall), aslında iptables’ın üzerine kurulmuş, kullanımı kolay bir arayüzdür.
iptables çok güçlü ama yeni başlayanlar için kafa karıştırıcı olabiliyor.

İşte tam bu noktada UFW devreye giriyor. Basit komutlarla güvenlik duvarı kurallarını ayarlayabiliyorsunuz.
Yani karmaşık şeylerle uğraşmadan, “hadi şu sunucuyu biraz güvene alayım” dediğinizde elinizin altında hazır bir çözüm oluyor.
Ubuntu üzerinde hızlıca ağ güvenliği sağlamak isteyen herkes için gayet uygun bir tercih.

Bu rehberde Ubuntu üzerinde UFW kullanarak nasıl güvenlik duvarı kuracağınızı öğreneceksiniz.
Adım adım şunları yapacağız:

  • Varsayılan politikaları ayarlamak
  • Belirli port ya da servisleri açıp kapatmak (izin vermek veya engellemek)
  • Güvenlik duvarı kurallarını yönetmek

Ayrıca önemli noktalara da değineceğiz:

  • Güvenlik duvarını açmadan önce SSH erişimini aktif etmek
  • Kuralların durumunu kontrol etmek
  • Gerekirse ayarları sıfırlamak

Son olarak da uzun vadede daha güvenli bir yapı için en iyi güvenlik uygulamalarına göz atacağız.

Ön Gereksinimler

  • Ubuntu 20.04 veya daha eski bir sürüm kullanıyorsanız, daha güncel bir versiyona geçmeniz tavsiye edilir.
  • Bu rehberi takip etmek için:
    • Ubuntu çalıştıran bir sunucu
    • sudo yetkisine sahip, root olmayan bir kullanıcı lazım.
  • UFW Ubuntu’da varsayılan olarak kurulu gelir. Eğer kaldırılmışsa şu komutla tekrar kurabilirsiniz:
  sudo apt install ufw

Adım 1 — IPv6’nın Açık Olduğundan Emin Olmak

Ubuntu’nun yeni sürümlerinde IPv6 varsayılan olarak açıktır.
Bu sayede eklediğiniz çoğu güvenlik duvarı kuralı hem IPv4 hem de IPv6 için geçerli olur.
UFW durum çıktısında v6 ibaresini görüyorsanız, bu IPv6 kurallarını ifade eder.

IPv6’nın aktif olduğunu doğrulamak için UFW yapılandırma dosyasına bakın:

sudo nano /etc/default/ufw

Dosya açıldığında IPV6 satırının yes olarak ayarlandığından emin olun.
Şu şekilde görünmesi lazım:

IPV6=yes

Dosyayı kaydedip kapatın.
Eğer nano kullanıyorsanız: CTRL+X, ardından Y ve son olarak ENTER tuşlarına basmanız yeterli.

Bunu yaptıktan sonra, UFW’yi ileride aktif ettiğinizde hem IPv4 hem de IPv6 kurallarını yazacak şekilde çalışacaktır.

Adım 2 — Varsayılan Politikaları Ayarlamak

UFW’yi ilk kez kullanmaya başlıyorsanız, yapmanız gereken ilk şey varsayılan kuralları kontrol etmektir.
Bu kurallar, herhangi bir tanıma uymayan trafik geldiğinde nasıl davranılacağını belirler.

Varsayılan olarak UFW, tüm gelen bağlantıları reddeder, tüm giden bağlantılara izin verir.
Yani dışarıdan biri sunucunuza bağlanamaz, ama sunucudaki uygulamalar dış dünyaya rahatça erişebilir.
Sonrasında istisna olarak izin vermek istediğiniz kuralları kendiniz ekleyebilirsiniz.

Şimdi varsayılan politikaları netleştirelim:

Gelen trafiği reddetmek için:

sudo ufw default deny incoming

Bu mesaj, gelen bağlantılar için varsayılan politikanın reddet olarak ayarlandığını gösterir.
Artık ihtiyacınıza göre istisna kurallar ekleyebilirsiniz.

Output
Default incoming policy changed to 'deny'
(be sure to update your rules accordingly)

Varsayılan olarak giden trafiğe izin vermek için şu komutu çalıştırın:

sudo ufw default allow outgoing
Output
Default outgoing policy changed to 'allow'
(be sure to update your rules accordingly)

Bu komutlarla varsayılan ayarları şöyle yapmış olduk:

  • Gelen bağlantılar → reddet
  • Giden bağlantılar → izin ver

Bu ayarlar kişisel bilgisayarlar için çoğu zaman yeterlidir.
Ama bir sunucu dışarıdan gelen isteklere yanıt vermek zorunda olduğu için ekstra kurallar eklemek gerekir.
Bir sonraki adımda buna bakacağız.

Adım 3 — SSH Bağlantılarına İzin Vermek

Şu anda UFW’yi aktif etsek, tüm gelen bağlantılar engellenecek.
Bu yüzden sunucunun yanıt verebilmesi için açıkça izin vermemiz gereken bağlantılar var.
Örneğin SSH ya da HTTP.

Özellikle bir bulut sunucusu kullanıyorsanız, yönetim için SSH’ye bağlanmanız şart.
Bu yüzden ilk iş olarak SSH bağlantısına izin vermeliyiz.

OpenSSH UFW Uygulama Profiline İzin Vermek

Çoğu ağ tabanlı uygulama kurulduğunda, UFW’ye bir uygulama profili ekler.
Böylece servisleri hızlıca açıp kapatabilirsiniz.

Mevcut profilleri görmek için şu komutu çalıştırın:

sudo ufw app list
Output
Available applications:
OpenSSH

Bu işlem, güvenlik duvarına 22 numaralı portu açan bir kural ekler.
Yani SSH servisi varsayılan olarak bu portu dinlediği için artık SSH bağlantılarına izin verilmiş olur.

Servis Adı ile SSH’ye İzin Vermek

SSH bağlantılarına izin vermenin bir diğer yolu da servis adını kullanmaktır.
Yani ssh ismini referans alarak kural ekleyebilirsiniz:

sudo ufw allow ssh
Output
Rule added
Rule added (v6)

Port Numarası ile SSH’ye İzin Vermek

SSH’ye izin vermenin bir başka yolu da doğrudan port numarasını belirtmektir.
Bu yöntem uygulama profili veya servis adı kullanmakla aynı sonucu verir.

Örneğin:

sudo ufw allow 22
Output
Rule added
Rule added (v6)

Eğer SSH servisinizi varsayılan 22 dışında bir portta çalışacak şekilde ayarladıysanız, o portu belirtmeniz gerekir.

Örneğin SSH sunucunuz 2222 portunu dinliyorsa, izin vermek için şu komutu kullanabilirsiniz:

sudo ufw allow 2222
Output
Rule added
Rule added (v6)

Rate Limiting

SSH gibi servisleri brute-force saldırılardan korumak için UFW’nin rate limiting özelliği vardır. Bu özellik, her IP adresinden gelen bağlantı denemelerini takip eder.
Eğer kısa sürede çok fazla deneme olursa, ilgili IP geçici olarak engellenir.

Böylece normal kullanım ile kötü niyetli saldırılar arasında ayrım yapılır.
Yani “izin ver ya da tamamen engelle” yerine daha akıllı bir koruma sağlar.

Bir servise rate limit uygulamak için allow yerine limit komutunu kullanırsınız.
En yaygın kullanım örneği: SSH’yi güvene almak.

sudo ufw limit ssh

Bu tek komut aslında bir kural oluşturuyor:
SSH bağlantılarına izin veriyor ama bir şartla... Eğer bir IP adresi 30 saniye içinde 6 veya daha fazla deneme yaparsa, UFW o IP’den gelen yeni bağlantıları reddediyor.

İnternete açık servisler için fazladan bir güvenlik katmanı eklemenin basit ama etkili bir yolu.

Adım 4 — UFW’yi Etkinleştirmek

Artık güvenlik duvarını SSH bağlantılarına izin verecek şekilde ayarladık.
Güvenlik duvarı henüz kapalı olsa bile, eklenen kuralları kontrol etmek için şu komutu kullanabilirsiniz:

sudo ufw show added
Output
Added user rules (see 'ufw status' for running firewall):
ufw allow OpenSSH

SSH için izin kuralının eklendiğinden emin olduktan sonra güvenlik duvarını etkinleştirin:

sudo ufw enable
Output
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

Komutu çalıştırdığınızda küçük bir uyarı alırsınız:
“Bu işlem mevcut SSH bağlantınızı kesebilir.”

Ama biz zaten SSH’ye izin veren kuralı eklediğimiz için sorun olmayacak.
y yazıp ENTER tuşuna basarak devam edin.

Artık güvenlik duvarı aktif!

Bu noktadan sonra rehberin geri kalanında UFW’yi daha detaylı kullanmayı öğreneceksiniz:

  • Farklı bağlantı türlerine izin vermek

  • Gerekirse bazı bağlantıları engellemek

Adım 5 — Diğer Bağlantılara İzin Vermek

Bu aşamada artık sunucunuzun ihtiyaç duyduğu diğer bağlantılara da izin vermelisiniz.
Hangi bağlantıların açılacağı tamamen sizin kullanımınıza bağlı.

Kural yazmayı zaten öğrendiniz:

  • Uygulama profiliyle
  • Servis adıyla
  • Port numarasıyla

SSH için (port 22) nasıl yaptıysak, aynı şekilde diğer servisler için de yapabiliriz.

Unutma!

Sunucunda hangi uygulama profilleri hazırda var görmek için:

sudo ufw app list

Belirli Port Aralıkları

Bazı uygulamalar tek port yerine birden fazla port kullanır.
UFW ile port aralıklarına da izin verebilirsiniz.

Örneğin X11 bağlantıları için (6000–6007 arası portları kullanır):

sudo ufw allow 6000:6007/tcp
sudo ufw allow 6000:6007/udp

Port aralığı belirtirken UFW’de mutlaka protokol (tcp ya da udp) yazmanız gerekir.
Bunu daha önce söylemedik çünkü tek bir port açarken protokolü yazmazsanız UFW otomatik olarak hem TCP hem de UDP için izin verir.
Çoğu durumda bu zaten sorun olmaz.

Belirli IP Adresleri

UFW ile kurallarınıza IP adresi de ekleyebilirsiniz.
Örneğin sadece iş veya ev IP’niz (mesela 203.0.113.4) sunucuya erişebilsin istiyorsanız, from parametresini kullanın:

sudo ufw allow from 203.0.113.4
Output
Rule added

Ayrıca belirli bir IP’nin sadece belli bir porta erişmesine de izin verebilirsiniz.
Bunun için to any port ifadesi kullanılır.

Örneğin 203.0.113.4 adresine sadece 22 (SSH) portundan erişim izni vermek için:

sudo ufw allow from 203.0.113.4 to any port 22
Output
Rule added

Alt Ağlar (Subnets)

Belirli bir IP aralığına izin vermek için CIDR notasyonu kullanabilirsiniz.

Örneğin 203.0.113.1 ile 203.0.113.254 arasındaki tüm IP’lere izin vermek için:

sudo ufw allow from 203.0.113.0/24
Output
Rule added

Aynı şekilde, bir alt ağın sadece belirli bir porta erişmesine de izin verebilirsiniz.
Mesela 203.0.113.0/24 alt ağı sadece 22 (SSH) portuna bağlanabilsin diyorsanız:

sudo ufw allow from 203.0.113.0/24 to any port 22
Output
Rule added

Belirli Bir Ağ Arayüzüne Bağlantılar

Bazı kuralların sadece belirli bir network interface (ağ arayüzü) için geçerli olmasını isteyebilirsiniz.
Bunun için allow in on ifadesiyle arayüz adını belirtmeniz yeterli.

Devam etmeden önce hangi ağ arayüzlerinin olduğunu görmek için şu komutu kullanın:

ip addr
Output Excerpt
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state
. . .
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default
. . .

Komutun çıktısında ağ arayüzü isimlerini göreceksiniz.
Genelde eth0 veya enp3s2 gibi isimler olur.

Eğer sunucunuzda eth0 adında bir public interface varsa, sadece bu arayüze HTTP (80) trafiğini açmak için:

sudo ufw allow in on eth1 to any port 80
Output
Rule added
Rule added (v6)

Adım 6 — Bağlantıları Engellemek

Varsayılan ayarlarda UFW, tüm gelen bağlantıları reddeder.
Bu da işimizi kolaylaştırır çünkü sadece izin vermek istediğimiz port ve IP’ler için kural eklememiz yeterlidir.

Ama bazen özel olarak bazı bağlantıları engellemek isteyebilirsiniz.
Mesela saldırı aldığınız bir IP adresini veya alt ağı hedef alarak.

Ayrıca (pek tavsiye edilmese de) varsayılan gelen politika allow yapılırsa, istemediğiniz servisler ve IP’ler için ayrı deny kuralları tanımlamanız gerekir.

Deny kuralı yazmak için daha önce kullandığımız komutlarda allow yerine deny yazmamız yeterli.

Örneğin HTTP bağlantılarını engellemek için:

sudo ufw deny http
Output
Rule added
Rule added (v6)

Eğer 203.0.113.4 adresinden gelen tüm bağlantıları engellemek isterseniz:

sudo ufw deny from 203.0.113.4
Output
Rule added
Rule added (v6)

Bazı durumlarda sunucudan dışarıya giden bağlantıları da engellemek isteyebilirsiniz.
Örneğin tüm kullanıcıların 25 numaralı portu (SMTP trafiği) kullanmasını kapatmak için:

sudo ufw deny out 25
Output
Rule added
Rule added (v6)

Adım 7 — Kuralları Silmek

Güvenlik duvarı kuralı eklemeyi bilmek kadar, gerektiğinde kural silmeyi bilmek de önemlidir.
UFW’de kural silmenin iki yolu vardır:

  1. Kural numarasıyla silmek
  2. Okunabilir tanımıyla silmek (eklerken kullandığımız yöntemle benzer)

Kuralı Numara ile Silmek

Önce mevcut kuralları numaralı şekilde listeleyelim:

sudo ufw status numbered
Numbered Output:
Status: active

To Action From
-- ------ ----
[ 1] 22 ALLOW IN 15.15.15.0/24
[ 2] 80 ALLOW IN Anywhere

Diyelim ki 2 numaralı kuralı (HTTP için port 80’i açan kural) silmek istiyorsunuz.
Bunu şu komutla yapabilirsiniz:

sudo ufw delete 2
Output
Deleting:
allow 80
Proceed with operation (y|n)? y
Rule deleted

⚠️ Önemli Not:

sudo ufw status numbered çıktısında IPv4 ve IPv6 kuralları ayrı listelenir.
Bir kuralı numarasıyla sildiğinizde sadece tek bir giriş silinir.
Yani aynı kuralın (v6) sürümünü de ayrıca silmeniz gerekir.

Buna karşılık, kuralı adıyla silerseniz

sudo ufw delete allow http

hem IPv4 hem de IPv6 kuralı tek seferde kaldırılır.

Kuralı Adıyla Silmek

Numaralar yerine kuralları adıyla da silebilirsiniz.
Bu tanım genelde kural türüne (allow/deny) ve hedeflenen servise veya porta göre olur.
Eğer bir uygulama profili kullandıysanız (örneğin Apache Full), onun adıyla da silebilirsiniz.

Örneğin daha önce eklediğiniz Apache Full kuralını kaldırmak için:

sudo ufw delete allow 'Apache Full'
Output
Rule deleted
Rule deleted (v6)

delete komutu, servis adı ya da port numarasıyla oluşturduğunuz kurallar için de aynı şekilde çalışır.

Örneğin daha önce şu komutla HTTP bağlantılarına izin verdiyseniz:

sudo ufw allow http
Output
Rule deleted
Rule deleted (v6)

Servis adlarıyla port numaraları birbirinin yerine kullanılabildiği için aynı kuralı şöyle de silebilirsiniz:

sudo ufw delete allow 80
Output
Rule deleted
Rule deleted (v6)

Adım 8 — UFW’nin Durumunu ve Kuralları Kontrol Etmek

UFW’nin durumunu istediğiniz zaman görmek için:

sudo ufw status

Eğer UFW kapalıysa (varsayılan olarak böyledir), şöyle bir çıktı görürsünüz:

Output
Status: inactive

Eğer UFW aktifse (Step 3’te yaptığımız gibi), çıktıda active yazacak ve eklediğiniz kuralları listeleyecektir.

Örneğin SSH (port 22) bağlantılarına her yerden izin verdiyseniz, çıktı şöyle olabilir:

Output
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere

Adım 9 — Güvenlik Duvarını Kapatmak veya Sıfırlamak

Eğer UFW’yi kullanmak istemezseniz, güvenlik duvarını devre dışı bırakabilirsiniz:

sudo ufw disable
Output
Firewall stopped and disabled on system startup

UFW’yi kapattığınızda oluşturduğunuz tüm kurallar devre dışı kalır.
Daha sonra tekrar açmak isterseniz:

sudo ufw enable

Eğer mevcut kuralları tamamen sıfırlayıp baştan başlamak isterseniz:

sudo ufw reset
Output
Resetting all rules to installed defaults. This may disrupt existing ssh
connections. Proceed with operation (y|n)? y
Backing up 'user.rules' to '/etc/ufw/user.rules.20210729_170353'
Backing up 'before.rules' to '/etc/ufw/before.rules.20210729_170353'
Backing up 'after.rules' to '/etc/ufw/after.rules.20210729_170353'
Backing up 'user6.rules' to '/etc/ufw/user6.rules.20210729_170353'
Backing up 'before6.rules' to '/etc/ufw/before6.rules.20210729_170353'
Backing up 'after6.rules' to '/etc/ufw/after6.rules.20210729_170353'

Bu komut UFW’yi kapatır ve daha önce tanımladığınız tüm kuralları siler.
Yani tertemiz, sıfırdan başlamış olursunuz.

Ama unutmayın: varsayılan politikalar en son nasıl ayarlandıysa öyle kalır.
Gerekirse onları da manuel olarak tekrar düzenlemeniz gerekebilir.

Sonuç

Artık güvenlik duvarınız aktif ve yapılandırılmış durumda, bu da sunucunuz için sağlam bir güvenlik temeli oluşturuyor. 🚀

  • Varsayılan politikayı gelen bağlantıları reddet olarak ayarlayarak, güvenliğin temel prensiplerinden biri olan en az ayrıcalık kuralını uyguladınız.
  • SSH gibi gerekli servisler için istisnalar eklemeyi öğrendiniz.
  • Uygulama profilleri, port numaraları veya IP adreslerine göre kurallar ekleyerek sadece meşru trafiğe izin verip geri kalan her şeyi engelleyebiliyorsunuz.